home *** CD-ROM | disk | FTP | other *** search
- ; DERIV
-
- (DEFUN deriv-aux (A) (LIST '/ (DERIV A) A))
-
- (DEFUN DERIV (A)
- (COND
- ((ATOM A)
- (COND ((EQ A 'X) 1) (T 0)))
- ((EQ (CAR A) '+)
- (CONS '+ (MAPCAR #'DERIV (CDR A))))
- ((EQ (CAR A) '-)
- (CONS '- (MAPCAR #'DERIV (CDR A))))
- ((EQ (CAR A) '*)
- (LIST '*
- A
- (CONS '+ (MAPCAR 'deriv-aux (CDR A)))))
- ((EQ (CAR A) '/)
- (LIST '-
- (LIST '/
- (DERIV (CADR A))
- (CADDR A))
- (LIST '/
- (CADR A)
- (LIST '*
- (CADDR A)
- (CADDR A)
- (DERIV (CADDR A))))))
- (T 'ERROR)))
-
- (DEFUN RUN-deriv ()
- (DO ((I 0 (1+ I)))
- ((= I 1000.))
- #-GCLisp (DECLARE (type FIXNUM I))
- (DERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DERIV '(+ (* 3 X X) (* A X X) (* B X) 5))))
-
- (define-timer deriv "Deriv" (run-deriv))
- (qa-attempt "Deriv" (run-deriv) nil)
-
-
- ;;; 3.11 DDERIV
-
- (DEFUN dderiv-aux (A) (LIST '/ (DDERIV A) A))
-
- (DEFUN +DDERIV (A)
- (CONS '+ (MAPCAR #'DDERIV A)))
-
- (DEFUN -DDERIV (A)
- (CONS '- (MAPCAR #'DDERIV A)))
-
- (DEFUN *DDERIV (A)
- (LIST '* (CONS '* A)
- (CONS '+ (MAPCAR #'dderiv-aux A))))
-
- (DEFUN /DDERIV (A)
- (LIST '-
- (LIST '/
- (DDERIV (CAR A))
- (CADR A))
- (LIST '/
- (CAR A)
- (LIST '*
- (CADR A)
- (CADR A)
- (DDERIV (CADR A))))))
-
- (DEFUN DDERIV (A)
- (COND
- ((ATOM A)
- (COND ((EQ A 'X) 1) (T 0)))
- (T (LET ((DDERIV (GET (CAR A) 'DDERIV)))
- (COND (DDERIV (FUNCALL DDERIV (CDR A)))
- (T 'ERROR))))))
-
- (defun setup-dderiv ()
- (mapc #'(lambda (op fun)
- (setf (get op 'dderiv) (symbol-function fun)))
- '(+ - * /)
- '(+dderiv -dderiv *dderiv /dderiv)))
-
- (setup-dderiv)
-
- (DEFUN RUN-dderiv ()
- (DO ((I 0 (1+ I)))
- ((= I 1000.))
- #-GCLisp (DECLARE (type FIXNUM I))
- (DDERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DDERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DDERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DDERIV '(+ (* 3 X X) (* A X X) (* B X) 5))
- (DDERIV '(+ (* 3 X X) (* A X X) (* B X) 5))))
-
- (define-timer dderiv "DDeriv" (run-dderiv))
- (qa-attempt "DDeriv" (run-dderiv) nil)